]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Revert "Revert "windowManager: Block dynamic workspace updates while showing the...
authorAdel Gadllah <adel.gadllah@gmail.com>
Fri, 27 Mar 2015 13:34:28 +0000 (14:34 +0100)
committerAdel Gadllah <adel.gadllah@gmail.com>
Fri, 27 Mar 2015 13:34:28 +0000 (14:34 +0100)
This was an accident.

This reverts commit 5e26d0c90c778559da73590517b65e60b1f27b1c.

js/ui/windowManager.js

index bdde74637238f1f91513124f74c5370e176f2208..01d510736f86a4488fe46ebe7736a599845215e4 100644 (file)
@@ -197,6 +197,8 @@ const WorkspaceTracker = new Lang.Class({
         this._workspaces = [];
         this._checkWorkspacesId = 0;
 
+        this._pauseWorkspaceCheck = false;
+
         let tracker = Shell.WindowTracker.get_default();
         tracker.connect('startup-sequence-changed', Lang.bind(this, this._queueCheckWorkspaces));
 
@@ -220,6 +222,14 @@ const WorkspaceTracker = new Lang.Class({
         return new Gio.Settings({ schema_id: 'org.gnome.mutter' });
     },
 
+    blockUpdates: function() {
+        this._pauseWorkspaceCheck = true;
+    },
+
+    unblockUpdates: function() {
+        this._pauseWorkspaceCheck = false;
+    },
+
     _checkWorkspaces: function() {
         let i;
         let emptyWorkspaces = [];
@@ -229,6 +239,10 @@ const WorkspaceTracker = new Lang.Class({
             return false;
         }
 
+        // Update workspaces only if Dynamic Workspace Management has not been paused by some other function
+        if (this._pauseWorkspaceCheck)
+            return true;
+
         for (i = 0; i < this._workspaces.length; i++) {
             let lastRemoved = this._workspaces[i]._lastRemovedWindow;
             if ((lastRemoved &&
@@ -627,6 +641,8 @@ const WindowManager = new Lang.Class({
 
         this._allowedKeybindings = {};
 
+        this._isWorkspacePrepended = false;
+
         this._switchData = null;
         this._shellwm.connect('kill-switch-workspace', Lang.bind(this, this._switchWorkspaceDone));
         this._shellwm.connect('kill-window-effects', Lang.bind(this, function (shellwm, actor) {
@@ -915,6 +931,8 @@ const WindowManager = new Lang.Class({
         if (!Meta.prefs_get_dynamic_workspaces())
             return;
 
+        global.screen.append_new_workspace(false, global.get_current_time());
+
         let windows = global.get_window_actors().map(function(winActor) {
             return winActor.meta_window;
         });
@@ -1642,8 +1660,10 @@ const WindowManager = new Lang.Class({
         } else if (isNaN(target)) {
             // Prepend a new workspace dynamically
             if (screen.get_active_workspace_index() == 0 &&
-                action == 'move' && target == 'up')
+                action == 'move' && target == 'up' && this._isWorkspacePrepended == false) {
                 this.insertWorkspace(0);
+                this._isWorkspacePrepended = true;
+            }
 
             direction = Meta.MotionDirection[target.toUpperCase()];
             newWs = screen.get_active_workspace().get_neighbor(direction);
@@ -1668,9 +1688,12 @@ const WindowManager = new Lang.Class({
 
         if (!Main.overview.visible) {
             if (this._workspaceSwitcherPopup == null) {
+                this._workspaceTracker.blockUpdates();
                 this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup();
                 this._workspaceSwitcherPopup.connect('destroy', Lang.bind(this, function() {
+                    this._workspaceTracker.unblockUpdates();
                     this._workspaceSwitcherPopup = null;
+                    this._isWorkspacePrepended = false;
                 }));
             }
             this._workspaceSwitcherPopup.display(direction, newWs.index());